#include<iostream>
#include<vector>
#include<stdio.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{
    printf("当前进程的开始\n");

    //execl("/usr/bin/ls","ls",NULL);
    execl("/usr/bin/lsss","lsss","--color=auto","-l",NULL);
    //execl("/usr/bin/ls","ls","-l","-a","-i",NULL);
    //execl("/usr/bin/top","top",NULL);
    
    printf("当前进程的开始\n");

    return 0;
}


//typedef void (*handler_t)(); //函数指针类型
//
//std::vector<handler_t> handlers; //函数指针数组
//
//void fun_one()
//{
//    printf("这是一个临时任务1\n");
//}
//
//void fun_two()
//{
//
//    printf("这是一个临时任务2\n");
//}
//
////设置对应的方法回调
////以后想让父进程闲了执行任何方法的时候，只要向Lode里面注册，就可以让父进程执行对应的方法
//void Lode()
//{
//    handlers.push_back(fun_one);
//    handlers.push_back(fun_two);
//}
//
//int main()
//{
//    pid_t id = fork();
//    if(id == 0)
//    { 
//        //子进程
//        int cnt = 5;
//        while(cnt)
//        {
//            printf("我是子进程：%d\n",cnt--);
//            sleep(1);
//        }
//         
//        exit(11); //11仅用来测试
//    }
//    else
//    {
//        int quit = 0;
//        while(!quit)
//        {
//            int status = 0;
//            pid_t res = waitpid(-1,&status,WNOHANG);//以非阻塞方式等待
//            if(res > 0)
//            {
//                //等待成功 && 子进程退出
//                printf("等待子进程退出成功，退出码：%d\n",WEXITSTATUS(status));
//                quit = 1;
//            }
//            else if(res == 0)
//            {
//                //等待成功 && 子进程还没退出
//                printf("子进程还在运行中，暂时还没有退出，父进程可以在等等，处理一下其他的事情\n");
//                if(handlers.empty()) Lode();
//                for(auto iter:handlers)
//                {
//                    //执行处理其他任务
//                    iter();
//                }
//            }
//            else 
//            {
//                //等待失败
//                printf("wait失败！\n");
//                quit = 1;
//            }
//            sleep(1);
//        }
//
//
//
//        ////父进程
//        //int status = 0;
//        ////只有子进程退出的时候，父进程才会waitpid函数，进行返回[父进程依旧还活着]
//        ////wait/waitpid可以在目前的情况下，让进程退出具有一定的顺序性！
//        ////将来可以让父进程进行更多的收尾工作
//        ////id > 0:等待指定进程
//        ////id < 0:等待任意一个子进程退出，等价于wait()接口
//        ////options:默认为0，代表阻塞等待，WNOHANG：叫做非阻塞等待
//        //pid_t result = waitpid(id,&status,0);//默认是在阻塞状态去等待子进程状态变化（就是退出）
//        //if(result > 0)
//        //{
//        //    //可以不这么检测
//        //    //printf("父进程等待成功，退出码:%d,退出信号:%d\n",(status>>8)&0xFF,status&0x7F);
//        //    if(WIFEXITED(status))
//        //    {
//        //        //子进程是正常退出的
//        //        printf("子进程执行完毕，子进程的退出码：%d\n",WEXITSTATUS(status));
//        //    }
//        //    else
//        //    {
//        //        printf("子进程异常退出:%d\n",WIFEXITED(status));
//        //    }
//        //}
//    }
//
//
//}
